Data updated 2020-06-17 08:33:41. World data are from Worldometers. National and state-level mortality, case, and testing data are from Johns-Hopkins University. County and city-level mortality and case data are from the New York Times. Most data presented in this report were accessed through APIs provided by The COVID Tracking Project and NovelCOVID API.

World Data

There have been 8,251,224 confirmed Covid-19 cases and 445,188 deaths worldwide.

National Data

There have been 2,127,047 confirmed Covid-19 cases and 110,695 deaths in the United States.

Deaths

Because the effects of the virus can take several weeks to manifest in patients, deaths are a lagging indicator of contagion, but they may be a more reliable than case counts, which are a function of both the prevalence of the disease and the rate of testing.

The case mortality rate is a very crude indicator of lethality because a large numbers of non-lethal cases are likely never detected. A declining case mortality rate is indicative of more widespread testing.

Cases

Reported cases are a function of both the spread of the disease and the prevalence of testing.

Testing

Widespread testing is necessary for managing the spread of the disease. The following charts show how testing in the United States has changed over time.

When the supply of available tests is limited, they are typically only used for patients whose symptoms suggest they are likely to have contracted the virus. A high positive test rate indicates that testing capacity is constrained.

State Data

This section summarizes state-level data. Most data are reported for the largest 15 states by population, which account for NaN percent of the total U.S. population.

Deaths

Cases

Testing

Interpretation of differences in case rates across states is complicated by the fact that those states that do more thorough testing will invariably uncover more cases. A lower positive test rate is an indication that a state is doing more comprehensive testing since, when testing is rationed, only those individuals who are more likely to test positive are typically tested. The following chart compares the one-week increase in detected cases to the the number of tests administered per state (relative to population). The states of greatest current concern are those with both a large increase in detected cases and a relatively small increase tests. These states lie in the upper-right of the chart.

Local Data

The following charts present mortality, case, and testing data for the Washington DC metropolitan area.

Deaths

Cases

Testing

LS0tCnRpdGxlOiAiRXJpaydzIENvdmlkLTE5IENoYXJ0IFBhY2siCm91dHB1dDoKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KCkRhdGEgdXBkYXRlZCBgciBTeXMudGltZSgpYC4gIFdvcmxkIGRhdGEgYXJlIGZyb20gW1dvcmxkb21ldGVyc10oaHR0cHM6Ly9naXRodWIuY29tL05vdmVsQ292aWQvQVBJKS4gTmF0aW9uYWwgYW5kIHN0YXRlLWxldmVsIG1vcnRhbGl0eSwgY2FzZSwgYW5kIHRlc3RpbmcgZGF0YSBhcmUgZnJvbSBbSm9obnMtSG9wa2lucyBVbml2ZXJzaXR5XShodHRwczovL2NvdmlkdHJhY2tpbmcuY29tKS4gQ291bnR5IGFuZCBjaXR5LWxldmVsIG1vcnRhbGl0eSBhbmQgY2FzZSBkYXRhIGFyZSBmcm9tIHRoZSBbTmV3IFlvcmsgVGltZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ob3ZlbENvdmlkL0FQSSkuIE1vc3QgZGF0YSBwcmVzZW50ZWQgaW4gdGhpcyByZXBvcnQgd2VyZSBhY2Nlc3NlZCB0aHJvdWdoIEFQSXMgcHJvdmlkZWQgYnkgW1RoZSBDT1ZJRCBUcmFja2luZyBQcm9qZWN0XShodHRwczovL2NvdmlkdHJhY2tpbmcuY29tKSBhbmQgW05vdmVsQ09WSUQgQVBJXShodHRwczovL2dpdGh1Yi5jb20vTm92ZWxDb3ZpZC9BUEkpLgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CgojIERlcGVuZGVuY2llcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeSh6b28pCiNsaWJyYXJ5KHNwRGF0YSkKbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoanNvbmxpdGUpCmxpYnJhcnkodXJibm1hcHIpCmxpYnJhcnkoZ2VvZmFjZXQpCgojIEdsb2JhbCBzdHlsZSBzZXR0aW5ncwprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IEZBTFNFLAogIHdhcm5pbmcgPSBGQUxTRSwKICBtZXNzYWdlID0gRkFMU0UKKQp0aGVtZV9zZXQodGhlbWVfYncoKSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTQpIAoKIyBJbXBvcnQgd29ybGQgZGF0YQpjb250aW5lbnRzIDwtIGZyb21KU09OKCJodHRwczovL2Rpc2Vhc2Uuc2gvdjIvY29udGluZW50cz95ZXN0ZXJkYXk9dHJ1ZSIpICU+JQogIGFycmFuZ2UoY29udGluZW50KQpjb3VudHJpZXMgPC0gZnJvbUpTT04oImh0dHBzOi8vZGlzZWFzZS5zaC92Mi9jb3VudHJpZXM/eWVzdGVyZGF5PXRydWUiKSAlPiUKICBtdXRhdGUoaXNvX2EzID0gY291bnRyeUluZm8kaXNvMykKCiMgSW1wb3J0IFVTIGRhdGEKdXNEYXRhIDwtIHJlYWQuY3N2KCJodHRwczovL2NvdmlkdHJhY2tpbmcuY29tL2FwaS91cy9kYWlseS5jc3YiKQp1c0RhdGEkZGF0ZSA9IGFzLkRhdGUoYXMuY2hhcmFjdGVyKHVzRGF0YSRkYXRlKSwgZm9ybWF0ID0gIiVZJW0lZCIpCnVzRGF0YSA8LSB1c0RhdGEgJT4lIAogIGZpbHRlcihkYXRlID49IGFzLkRhdGUoIjIwMjAtMDMtNyIpKSAlPiUKICBhcnJhbmdlKGRhdGUpICU+JQogIG11dGF0ZShhY3RpdmVDYXNlcyA9IHBvc2l0aXZlIC0gcmVjb3ZlcmVkIC0gZGVhdGgpICU+JQogIG11dGF0ZShhY3RpdmVJbmNyZWFzZSA9IGFjdGl2ZUNhc2VzIC0gbGFnKGFjdGl2ZUNhc2VzLDEpKSAlPiUKICBtdXRhdGUoY2FzZURlYXRoUmF0ZSA9IGRlYXRoL3Bvc2l0aXZlKSAlPiUKICBtdXRhdGUodGVzdFBvc2l0aXZlUmF0ZSA9IHBvc2l0aXZlSW5jcmVhc2UvdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSAlPiUKICBtdXRhdGUoZGFpbHlQb3NpdGl2ZVJhdGVfID0gcG9zaXRpdmVJbmNyZWFzZS90b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZURlYXRocyA9IHJvbGxtZWFuKGRlYXRoSW5jcmVhc2Usaz03LGFsaWduPSJyaWdodCIsIGZpbGw9TkEpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VDYXNlcyA9IHJvbGxtZWFuKHBvc2l0aXZlSW5jcmVhc2Usaz03LGFsaWduPSJyaWdodCIsIGZpbGw9TkEpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VUZXN0cyA9IHJvbGxtZWFuKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICU+JQogIG11dGF0ZSh3ZWVrQ2hhbmdlRGVhdGhzID0gZGVhdGhJbmNyZWFzZSAtIGxhZyhkZWF0aEluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0NoYW5nZUNhc2VzID0gcG9zaXRpdmVJbmNyZWFzZSAtIGxhZyhwb3NpdGl2ZUluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0NoYW5nZVRlc3RzID0gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlIC0gbGFnKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSw3KSkKYGBgCgojIFdvcmxkIERhdGEKClRoZXJlIGhhdmUgYmVlbiBgciBmb3JtYXQoc3VtKGNvdW50cmllcyRjYXNlcyksYmlnLm1hcmsgPSAiLCIpYCBjb25maXJtZWQgQ292aWQtMTkgY2FzZXMgYW5kIGByIGZvcm1hdChzdW0oY291bnRyaWVzJGRlYXRocyksYmlnLm1hcmsgPSAiLCIpYCBkZWF0aHMgd29ybGR3aWRlLgoKCmBgYHtyLCBmaWcuaGVpZ2h0PTMuNSwgZmlnLndpZHRoPTZ9CmdncGxvdChjb250aW5lbnRzLCBhZXMoeD1jb250aW5lbnQseT1kZWF0aHMpKSArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMiLCB5PSJUb3RhbCBEZWF0aHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgY29vcmRfZmxpcCgpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9My41LCBmaWcud2lkdGg9Nn0KZ2dwbG90KGNvbnRpbmVudHMsIGFlcyh4PWNvbnRpbmVudCx5PWNhc2VzKSkgKwogIGdlb21fY29sKCkgKwogIGxhYnModGl0bGUgPSAiQ2FzZXMiLCB5PSJUb3RhbCBDYXNlcyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICBjb29yZF9mbGlwKCkKYGBgCgpcbmV3cGFnZQoKYGBge3IsIGZpZy53aWR0aD02LGZpZy5oZWlnaHQ9My41fQpkYXRhKCJXb3JsZCIpCldvcmxkJGlzb19hMyA8LSBhcy5jaGFyYWN0ZXIoV29ybGQkaXNvX2EzKQpXb3JsZCA8LSBzdF90cmFuc2Zvcm0oV29ybGQsNDMyNikKd29ybGRNYXBEYXRhIDwtIHJpZ2h0X2pvaW4oV29ybGQsY291bnRyaWVzLGJ5PSJpc29fYTMiKSAKd29ybGRNYXBEYXRhJGRlYXRoc1Blck9uZU1pbGxpb25bd29ybGRNYXBEYXRhJGRlYXRoc1Blck9uZU1pbGxpb249PTBdID0gTkEKd29ybGRNYXBEYXRhJGNhc2VzUGVyT25lTWlsbGlvblt3b3JsZE1hcERhdGEkY2FzZXNQZXJPbmVNaWxsaW9uPT0wXSA9IE5BCndvcmxkTWFwRGF0YSR0ZXN0c1Blck9uZU1pbGxpb25bd29ybGRNYXBEYXRhJHRlc3RzUGVyT25lTWlsbGlvbj09MF0gPSBOQQoKdG1fc2hhcGUod29ybGRNYXBEYXRhKSArIHRtX2JvcmRlcnMoKSArIAogIHRtX2ZpbGwoY29sID0gImRlYXRoc1Blck9uZU1pbGxpb24iLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBwZXIgTWlsbGlvbiIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTMuNX0KdG1fc2hhcGUod29ybGRNYXBEYXRhKSArIHRtX2JvcmRlcnMoKSArIAogIHRtX2ZpbGwoY29sID0gImNhc2VzUGVyT25lTWlsbGlvbiIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiQ2FzZXMgcGVyIE1pbGxpb24iKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD0zLjV9CnRtX3NoYXBlKHdvcmxkTWFwRGF0YSkgKyB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJ0ZXN0c1Blck9uZU1pbGxpb24iLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIlRlc3RzIHBlciBNaWxsaW9uIiwgcGFsZXR0ZSA9ICJCdUduIikgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIikKYGBgCgpcbmV3cGFnZQoKIyBOYXRpb25hbCBEYXRhCgpUaGVyZSBoYXZlIGJlZW4gYHIgZm9ybWF0KG1heCh1c0RhdGEkcG9zaXRpdmUpLGJpZy5tYXJrID0gIiwiKWAgY29uZmlybWVkIENvdmlkLTE5IGNhc2VzIGFuZCBgciBmb3JtYXQobWF4KHVzRGF0YSRkZWF0aCksYmlnLm1hcmsgPSAiLCIpYCBkZWF0aHMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMuCgpgYGB7cn0KI3VzRGF0YSAlPiUgCiMgIHNlbGVjdChkYXRlLHBvc2l0aXZlLGRlYXRoLHBvc2l0aXZlSW5jcmVhc2UsZGVhdGhJbmNyZWFzZSkgJT4lIAojICBhcnJhbmdlKGRlc2MoZGF0ZSkpICU+JQojICB0b3BfbihuPTcsd3Q9ZGF0ZSkgJT4lCiMgIHJlbmFtZShEYXRlID0gZGF0ZSwgCiMgICAgICAgICAiQ2FzZXMiID0gcG9zaXRpdmUsIAojICAgICAgICAgIkRlYXRocyIgPSBkZWF0aCwgCiMgICAgICAgICAiTmV3IENhc2VzIiA9IHBvc2l0aXZlSW5jcmVhc2UsIAojICAgICAgICAgIk5ldyBEZWF0aHMiID0gZGVhdGhJbmNyZWFzZSkKCmNvdW50aWVzIDwtIGdldF91cmJuX21hcCgiY291bnRpZXMiLCBzZiA9IFRSVUUpICU+JQogIHN0X3RyYW5zZm9ybSgyMTYzKSAlPiUKICBtdXRhdGUoZmlwcyA9IGFzLmludGVnZXIoY291bnR5X2ZpcHMpKQoKY291bnR5RGF0YSA8LSBmcm9tSlNPTigiaHR0cHM6Ly9kaXNlYXNlLnNoL3YyL255dC9jb3VudGllcyIpICU+JQogIGZpbHRlcihkYXRlID09IG1heChkYXRlKSkgJT4lCiAgbXV0YXRlKGZpcHMgPSBhcy5pbnRlZ2VyKGZpcHMpKQoKY291bnR5RGVtb2dyYXBoaWMgPC0gcmVhZC5jc3YoImNvdW50eV9wb3AuY3N2IikgJT4lCiAgc2VsZWN0KFNUQVRFLENPVU5UWSxTVE5BTUUsQ1RZTkFNRSxQT1BFU1RJTUFURTIwMTkpICU+JQogIG11dGF0ZShmaXBzID0gU1RBVEUqMTAwMCArIENPVU5UWSkKCmNvdW50eU1hcERhdGEgPC0gbGVmdF9qb2luKGNvdW50aWVzLGNvdW50eURhdGEsIGJ5ID0gImZpcHMiKSAKY291bnR5TWFwRGF0YSA8LSBsZWZ0X2pvaW4oY291bnR5TWFwRGF0YSxjb3VudHlEZW1vZ3JhcGhpYywgYnkgPSAiZmlwcyIpCmNvdW50eU1hcERhdGEgPC0gY291bnR5TWFwRGF0YSAlPiUKICBtdXRhdGUoZGVhdGhzUGVyTWlsID0gMWU2KihkZWF0aHMpLyhQT1BFU1RJTUFURTIwMTkpKSAlPiUKICBtdXRhdGUoY2FzZXNQZXJNaWwgID0gMWU2KihjYXNlcykvKFBPUEVTVElNQVRFMjAxOSkpCmNvdW50eU1hcERhdGEkZGVhdGhzUGVyTWlsW2NvdW50eU1hcERhdGEkZGVhdGhzUGVyTWlsIDwgMC4xXSA9IDAuMQpgYGAKCiMjIERlYXRocwoKQmVjYXVzZSB0aGUgZWZmZWN0cyBvZiB0aGUgdmlydXMgY2FuIHRha2Ugc2V2ZXJhbCB3ZWVrcyB0byBtYW5pZmVzdCBpbiBwYXRpZW50cywgZGVhdGhzIGFyZSBhIGxhZ2dpbmcgaW5kaWNhdG9yIG9mIGNvbnRhZ2lvbiwgYnV0IHRoZXkgbWF5IGJlIGEgbW9yZSByZWxpYWJsZSB0aGFuIGNhc2UgY291bnRzLCB3aGljaCBhcmUgYSBmdW5jdGlvbiBvZiBib3RoIHRoZSBwcmV2YWxlbmNlIG9mIHRoZSBkaXNlYXNlIGFuZCB0aGUgcmF0ZSBvZiB0ZXN0aW5nLgoKYGBge3J9CmdncGxvdCh1c0RhdGEpICsgCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBkZWF0aCksIHNpemUgPSAxKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMiLCB4ID0gIkRhdGUiLCB5ID0gIlRvdGFsIERlYXRocyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSkgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gZGVhdGhJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IGRlYXRoSW5jcmVhc2UpLCBzZT1GQUxTRSwgc3BhbiA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IERlYXRocyIsIHggPSAiRGF0ZSIsIHkgPSAiRGVhdGhzIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQpgYGAKClRoZSBjYXNlIG1vcnRhbGl0eSByYXRlIGlzIGEgdmVyeSBjcnVkZSBpbmRpY2F0b3Igb2YgbGV0aGFsaXR5IGJlY2F1c2UgYSBsYXJnZSBudW1iZXJzIG9mIG5vbi1sZXRoYWwgY2FzZXMgYXJlIGxpa2VseSBuZXZlciBkZXRlY3RlZC4gQSBkZWNsaW5pbmcgY2FzZSBtb3J0YWxpdHkgcmF0ZSBpcyBpbmRpY2F0aXZlIG9mIG1vcmUgd2lkZXNwcmVhZCB0ZXN0aW5nLgoKYGBge3J9CmdncGxvdCh1c0RhdGEsIGFlcyh4ID0gZGF0ZSwgeSA9IGRlYXRoSW5jcmVhc2UvbGFnKHBvc2l0aXZlSW5jcmVhc2UsMTQpKSkgKwogIGdlb21fbGluZShhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBDYXNlIE1vcnRhaWx0eSBSYXRlIiwgeCA9ICJEYXRlIiwgeSA9ICJSYXRlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50X2Zvcm1hdCgpLCBsaW1pdHMgPSBjKDAuMCwwLjI1KSkKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSwgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZURlYXRocykpICsgCiAgZ2VvbV9jb2woYWxwaGEgPSAwLjUpICsKICBnZW9tX3Ntb290aChzZT1GQUxTRSwgc3BhbiA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiT25lLVdlZWsgQ2hhbmdlIGluIERhaWx5IERlYXRocyIsIHg9IkRhdGUiLCB5PSI3LURheSBDaGFuZ2UiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NywgZmlnLmhlaWdodD02fQp0bV9zaGFwZShjb3VudHlNYXBEYXRhKSArIAogIHRtX2JvcmRlcnMobHdkID0gMC4zKSArIAojICB0bV9maWxsKGNvbCA9ICJkZWF0aHNQZXJUaG8iLCAgc3R5bGUgPSAiZml4ZWQiLCBicmVha3MgPSBjKDAsMC4wMSwwLjEsMC41LDEuMCwzLjApLCB0aXRsZSA9ICJEZWF0aHMgUGVyIDFLIikgKwogIHRtX2ZpbGwoY29sID0gImRlYXRoc1Blck1pbCIsICBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBQZXIgMU0iKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKXG5ld3BhZ2UKIyMgQ2FzZXMKClJlcG9ydGVkIGNhc2VzIGFyZSBhIGZ1bmN0aW9uIG9mIGJvdGggdGhlIHNwcmVhZCBvZiB0aGUgZGlzZWFzZSBhbmQgdGhlIHByZXZhbGVuY2Ugb2YgdGVzdGluZy4KCmBgYHtyfQpnZ3Bsb3QodXNEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBhY3RpdmVDYXNlcyksIHNpemU9MSkgKwogIGxhYnModGl0bGUgPSAiQWN0aXZlIENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICJDYXNlcyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSkgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gcG9zaXRpdmVJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHBvc2l0aXZlSW5jcmVhc2UpLCBzZT1GQUxTRSwgc3BhbiA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICJDYXNlcyBwZXIgRGF5IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSwgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZUNhc2VzKSkgKyAKICBnZW9tX2NvbChhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJPbmUtV2VlayBDaGFuZ2UgaW4gRGFpbHkgQ2FzZXMiLCB4PSJEYXRlIiwgeT0iNy1EYXkgQ2hhbmdlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KdG1fc2hhcGUoY291bnR5TWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKGx3ZCA9IDAuMykgKyAKIyAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJUaG8iLCBzdHlsZSA9ICJmaXhlZCIsIGJyZWFrcyA9IGMoMCwwLjEsMS4wLDUuMCwxMC4wLDMwLjApLCB0aXRsZSA9ICJDYXNlcyBQZXIgMUsiKSArCiAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkNhc2VzIFBlciAxTSIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIsIGxlZ2VuZC5wb3NpdGlvbiA9IGMoImxlZnQiLCJ0b3AiKSkKYGBgCgpcbmV3cGFnZQojIyBUZXN0aW5nCgpXaWRlc3ByZWFkIHRlc3RpbmcgaXMgbmVjZXNzYXJ5IGZvciBtYW5hZ2luZyB0aGUgc3ByZWFkIG9mIHRoZSBkaXNlYXNlLiBUaGUgZm9sbG93aW5nIGNoYXJ0cyBzaG93IGhvdyB0ZXN0aW5nIGluIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBjaGFuZ2VkIG92ZXIgdGltZS4KCmBgYHtyfQpnZ3Bsb3QodXNEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSB0b3RhbFRlc3RSZXN1bHRzKSxzaXplPTEpICsKICBsYWJzKHRpdGxlID0gIlRlc3RzIiwgeCA9ICJEYXRlIiwgeSA9ICJUb3RhbCBOdW1iZXIgb2YgVGVzdHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hLCB0cmFucyA9ICJsb2cxMCIpCmBgYAoKYGBge3J9CmdncGxvdCh1c0RhdGEpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSksIHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IFRlc3RzIiwgeCA9ICJEYXRlIiwgeSA9ICJUZXN0cyBQZXIgRGF5IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpXaGVuIHRoZSBzdXBwbHkgb2YgYXZhaWxhYmxlIHRlc3RzIGlzIGxpbWl0ZWQsIHRoZXkgYXJlIHR5cGljYWxseSBvbmx5IHVzZWQgZm9yIHBhdGllbnRzIHdob3NlIHN5bXB0b21zIHN1Z2dlc3QgdGhleSBhcmUgbGlrZWx5IHRvIGhhdmUgY29udHJhY3RlZCB0aGUgdmlydXMuIEEgaGlnaCBwb3NpdGl2ZSB0ZXN0IHJhdGUgaW5kaWNhdGVzIHRoYXQgdGVzdGluZyBjYXBhY2l0eSBpcyBjb25zdHJhaW5lZC4KCmBgYHtyfQpnZ3Bsb3QodXNEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSB0ZXN0UG9zaXRpdmVSYXRlKSwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gdGVzdFBvc2l0aXZlUmF0ZSksIHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiUG9zaXRpdmUgVGVzdCBSYXRlIiwgeCA9ICJEYXRlIiwgeSA9ICJSYXRlIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnRfZm9ybWF0KDIpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QodXNEYXRhLCAgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZVRlc3RzKSkgKyAKICBnZW9tX2NvbChhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJPbmUtV2VlayBDaGFuZ2UgaW4gRGFpbHkgVGVzdHMiLCB4PSJEYXRlIiwgeT0iNy1EYXkgQ2hhbmdlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpcbmV3cGFnZQojIFN0YXRlIERhdGEKCgpgYGB7cn0KCiMgU3RhdGUgbmFtZSB0byBGSVBTIGNvZGUgY3Jvc3N3YWxrCnN0YXRlRklQUyA8LSByZWFkLmNzdigic3RhdGVfRklQU19jb2Rlcy5jc3YiKSAlPiUgCiAgbXV0YXRlKHN0dXNwcyA9IHRyaW13cyhhcy5jaGFyYWN0ZXIoc3R1c3BzKSkpCgojIExvYWQgc3RhdGUgbGV2ZWwgaGlzdG9yaWFsIGRhdGEKc3RhdGVEYXRhIDwtIHJlYWQuY3N2KCJodHRwczovL2NvdmlkdHJhY2tpbmcuY29tL2FwaS92MS9zdGF0ZXMvZGFpbHkuY3N2IikgJT4lCiAgbXV0YXRlKHN0YXRlID0gYXMuZmFjdG9yKHN0YXRlKSkgJT4lCiAgbXV0YXRlKGRhdGUgPSBhcy5EYXRlKGFzLmNoYXJhY3RlcihkYXRlKSwgZm9ybWF0ID0gIiVZJW0lZCIpKQoKIyBTbmFtcHNob3Qgb2YgbW9zdCByZWNlbnQgc3RhdGUgZGF0YQpjdXJyZW50U3RhdGVEYXRhIDwtIHN0YXRlRGF0YSAlPiUgZmlsdGVyKGRhdGUgPT0gbWF4KGRhdGUpKQoKIyBTdGF0ZSBwdXB1bGF0b25zCnN0YXRlUG9wID0gcmVhZC5jc3YoInN0YXRlX3BvcC5jc3YiKSAlPiUKICBzZWxlY3QoU1RBVEUsUE9QRVNUSU1BVEUyMDE5KSAlPiUKICByZW5hbWUoc3QgPSBTVEFURSwgcG9wdWxhdGlvbiA9IFBPUEVTVElNQVRFMjAxOSkKCiMgQ3JlYXRlIHN0YXRlIGRhdGEgZm9yIG1hcHBpbmcKCiMgU3RhdGUgbWFwIGJvdW5kYXJ5IGFuZCBwb3B1bGF0aW9uIGRhdGEKc3RhdGVzIDwtIGdldF91cmJuX21hcCgic3RhdGVzIiwgc2YgPSBUUlVFKSAlPiUKICBtdXRhdGUoc3QgPSBhcy5pbnRlZ2VyKHN0YXRlX2ZpcHMpKQpzdGF0ZXMgPC0gbGVmdF9qb2luKHN0YXRlcyxzdGF0ZVBvcCwgYnkgPSAic3QiKQoKI3N0YXRlcyA8LSB1c19zdGF0ZXMgJT4lCiMgIHN0X3RyYW5zZm9ybSgyMTYzKSAlPiUKIyAgbXV0YXRlKHN0ID0gYXMuaW50ZWdlcihHRU9JRCkpIAojIE1lcmdlIGN1cnJlbnQgc3RhdGUgY292aWQgZGF0YSB3aXRoIGdlb2dyYXBoaWMgZGF0YSB2aWEgRklQUyBjcm9zc3dhbGsKc3RhdGVNYXBEYXRhIDwtIGN1cnJlbnRTdGF0ZURhdGEgJT4lCiAgc2VsZWN0KHN0YXRlLHBvc2l0aXZlLGRlYXRoLHRvdGFsVGVzdFJlc3VsdHMpICU+JQogIG11dGF0ZShzdHVzcHMgPSB0cmltd3MoYXMuY2hhcmFjdGVyKHN0YXRlKSkpCnN0YXRlTWFwRGF0YSA8LSBmdWxsX2pvaW4oc3RhdGVNYXBEYXRhLHN0YXRlRklQUywgYnk9InN0dXNwcyIpCnN0YXRlTWFwRGF0YSA8LSByaWdodF9qb2luKHN0YXRlcyxzdGF0ZU1hcERhdGEsYnk9InN0IikKIyBQZXIgY2FwaXRhIGRhdGEgZm9yIG1hcHBpbnQKc3RhdGVNYXBEYXRhIDwtIHN0YXRlTWFwRGF0YSAlPiUgCiAgbXV0YXRlKGRlYXRoc1Blck1pbCA9IDFlNipkZWF0aC9wb3B1bGF0aW9uLCAKICAgICAgICAgY2FzZXNQZXJNaWwgPSAxZTYqcG9zaXRpdmUvcG9wdWxhdGlvbiwKICAgICAgICAgdGVzdHNQZXJNaWwgPSAxZTYqdG90YWxUZXN0UmVzdWx0cy9wb3B1bGF0aW9uLAogICAgICAgICBwb3NpdGl2ZVRlc3RSYXRlID0gMTAwKnBvc2l0aXZlL3RvdGFsVGVzdFJlc3VsdHMpCgojIENyZWF0ZSBsaXN0IG9mIDE1IGxhcmdlc3Qgc3RhdGVzIGJ5IHBvcHVsYXRpb24KbGFyZ2VTdGF0ZXMgPC0gc3RhdGVzICU+JQogIHNlbGVjdChzdCwgcG9wdWxhdGlvbikgJT4lCiAgYXJyYW5nZShkZXNjKHBvcHVsYXRpb24pKSAlPiUKICByZW5hbWUoZmlwcyA9IHN0KSAlPiUKICBoZWFkKDE1KQoKIyBBZGQgdmFyaWFibGUgdG8gaGlzdG9yaWNhbCBkYXRhIGZvciBsYXJnZXN0IHN0YXRlcyBhbmQgb3RoZXJzCmJpZ1N0YXRlTHZscyA9IGMobGV2ZWxzKChzdGF0ZURhdGEkc3RhdGUpKSwiT3RoZXIiKQpzdGF0ZURhdGEgPC0gc3RhdGVEYXRhICU+JQogIG11dGF0ZShiaWdTdGF0ZSA9IGlmX2Vsc2UoZmlwcyAlaW4lIGxhcmdlU3RhdGVzJGZpcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3Ioc3RhdGUsIGxldmVscyA9IGJpZ1N0YXRlTHZscyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3IoIk90aGVyIiwgbGV2ZWxzID0gYmlnU3RhdGVMdmxzKSkpCgojIENyZWF0ZSBzdW1tYXJ5IGRhdGEgYWdncmVnYXRpbmcgIk90aGVyIiBzdGF0ZXMgdG9nZXRoZXIKYmlnU3RhdERhdGEgPC0gc3RhdGVEYXRhICU+JQogIGdyb3VwX2J5KGJpZ1N0YXRlLGRhdGUpICU+JQogIHN1bW1hcml6ZShkZWF0aCA9IHN1bShkZWF0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHJlY292ZXJlZCA9IHN1bShyZWNvdmVyZWQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICBkZWF0aEluY3JlYXNlID0gc3VtKGRlYXRoSW5jcmVhc2UsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICBwb3NpdGl2ZSA9IHN1bShwb3NpdGl2ZSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHBvc2l0aXZlSW5jcmVhc2UgPSBzdW0ocG9zaXRpdmVJbmNyZWFzZSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHRvdGFsVGVzdFJlc3VsdHMgPSBzdW0odG90YWxUZXN0UmVzdWx0cywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSA9IHN1bSh0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UsIG5hLnJtID0gVFJVRSkpCgojIEFkZCBzb21lIGRlcml2ZWQgdmFyaWFibGVzCmJpZ1N0YXREYXRhIDwtIGJpZ1N0YXREYXRhICU+JQogIGFycmFuZ2UoYmlnU3RhdGUsZGF0ZSkgJT4lCiAgZ3JvdXBfYnkoYmlnU3RhdGUpICU+JQogIG11dGF0ZShhY3RpdmVDYXNlcyA9IHBvc2l0aXZlIC0gcmVjb3ZlcmVkIC0gZGVhdGgpICU+JQogIG11dGF0ZShhY3RpdmVJbmNyZWFzZSA9IGFjdGl2ZUNhc2VzIC0gbGFnKGFjdGl2ZUNhc2VzLDEpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VEZWF0aHMgPSByb2xsbWVhbihkZWF0aEluY3JlYXNlLGs9NyxhbGlnbj0icmlnaHQiLCBmaWxsPU5BKSkgJT4lCiAgbXV0YXRlKHdlZWtDaGFuZ2VEZWF0aHMgPSBkZWF0aEluY3JlYXNlIC0gbGFnKGRlYXRoSW5jcmVhc2UsNykpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZUNhc2VzID0gcm9sbG1lYW4ocG9zaXRpdmVJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZUNhc2VzID0gcG9zaXRpdmVJbmNyZWFzZSAtIGxhZyhwb3NpdGl2ZUluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VUZXN0cyA9IHJvbGxtZWFuKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZVRlc3RzID0gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlIC0gbGFnKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSw3KSkgJT4lCiAgbXV0YXRlKHBvc2l0aXZlVGVzdFJhdGUgPSBwb3NpdGl2ZUluY3JlYXNlIC8gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSAlPiUKICBmaWx0ZXIoZGF0ZSA+PSBhcy5EYXRlKCIyMDIwLTAzLTEiKSkKYGBgCgpUaGlzIHNlY3Rpb24gc3VtbWFyaXplcyBzdGF0ZS1sZXZlbCBkYXRhLiBNb3N0IGRhdGEgYXJlIHJlcG9ydGVkIGZvciB0aGUgbGFyZ2VzdCAxNSBzdGF0ZXMgYnkgcG9wdWxhdGlvbiwgd2hpY2ggYWNjb3VudCBmb3IgYHIgZm9ybWF0KDEwMCpzdW0obGFyZ2VTdGF0ZXMkdG90YWxfcG9wXzE1KS9zdW0oc3RhdGVzJHRvdGFsX3BvcF8xNSksIGRpZ2l0cyA9IDEpYCBwZXJjZW50IG9mIHRoZSB0b3RhbCBVLlMuIHBvcHVsYXRpb24uCgojIyBEZWF0aHMKCmBgYHtyfQp0b3BEZWF0aHMgPC0gY3VycmVudFN0YXRlRGF0YSAlPiUKICBzZWxlY3Qoc3RhdGUscG9zaXRpdmUsZGVhdGgpICU+JQogIGFycmFuZ2UoZGVzYyhkZWF0aCkpICU+JQogIHRvcF9uKG49MTAsd3Q9ZGVhdGgpCgp0b3BEZWF0aHNUYWJsZSA8LSB0b3BEZWF0aHMgJT4lICAKICByZW5hbWUoIFN0YXRlID0gc3RhdGUsCiAgICAgICAgICBDYXNlcyA9IHBvc2l0aXZlLAogICAgICAgICAgRGVhdGhzID0gZGVhdGgpCgpgYGAKCmBgYHtyfQpkYXRlQnJlYWtzID0gYyhhcy5EYXRlKCIyMDIwLTMtMSIpLCBhcy5EYXRlKCIyMDIwLTQtMSIpLCBhcy5EYXRlKCIyMDIwLTUtMSIpLCBhcy5EYXRlKCIyMDIwLTYtMSIpKQoKZ2dwbG90KGJpZ1N0YXREYXRhICU+JSBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpLCBhZXMoYmlnU3RhdGUsZGVhdGgpKSArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMgYnkgU3RhdGUiLCB5PSJUb3RhbCBEZWF0aHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSAKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9N30KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9d2Vla0F2ZXJhZ2VEZWF0aHMpKSArIAogIGdlb21fbGluZShhbHBoYT0wLjQpICsgIAogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IERlYXRocyBieSBTdGF0ZSIsIHggPSAiRGF0ZSIsIHkgPSAiRGVhdGhzIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgZmFjZXRfd3JhcCh+YmlnU3RhdGUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViIiwgYnJlYWtzID0gZGF0ZUJyZWFrcykKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9N30KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9d2Vla0NoYW5nZURlYXRocykpICsgCiAgZ2VvbV9jb2woYWxwaGE9MC41KSArIAogIGxhYnModGl0bGUgPSAiNy1EYXkgQ2hhbmdlIGluIERhaWx5IERlYXRocyIsIHggPSAiRGF0ZSIsIHkgPSAiNy1EYXkgQ2hhbmdlIikgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICBmYWNldF93cmFwKH5iaWdTdGF0ZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWIiLCBicmVha3MgPSBkYXRlQnJlYWtzKQpgYGAKXG5ld3BhZ2UKCmBgYHtyLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD02fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAiZGVhdGgiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyIpICsgICAgCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTZ9CnRtX3NoYXBlKHN0YXRlTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJkZWF0aHNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBwZXIgMU0iKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKXG5ld3BhZ2UKIyMgQ2FzZXMKCmBgYHtyfQp0b3BDYXNlcyA8LSBjdXJyZW50U3RhdGVEYXRhICU+JQogIHNlbGVjdChzdGF0ZSxwb3NpdGl2ZSxkZWF0aCkgJT4lCiAgYXJyYW5nZShkZXNjKHBvc2l0aXZlKSkgJT4lCiAgdG9wX24obj0xMCx3dD1wb3NpdGl2ZSkKCnRvcENhc2VzVGFibGUgPC0gdG9wQ2FzZXMgJT4lCiAgcmVuYW1lKFN0YXRlID0gc3RhdGUsCiAgICAgICAgIENhc2VzID0gcG9zaXRpdmUsCiAgICAgICAgIERlYXRocyA9IGRlYXRoKQpgYGAKCgpgYGB7cn0KZ2dwbG90KGJpZ1N0YXREYXRhICU+JSBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpLCAKICAgICAgIGFlcyhiaWdTdGF0ZSxwb3NpdGl2ZSkpICArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJDYXNlcyBieSBTdGF0ZSIsIHk9IlRvdGFsIENhc2VzIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9cG9zaXRpdmVJbmNyZWFzZSkpICsKICBnZW9tX2xpbmUoYWxwaGE9MC40KSArICAKICBnZW9tX3Ntb290aChzZT1GQUxTRSwgc3Bhbj0wLjUpICsgCiAgbGFicyh0aXRsZSA9ICJOZXcgQ2FzZXMgYnkgU3RhdGUiLCB4ID0gIkRhdGUiLCB5ID0gIkNhc2VzIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgZmFjZXRfd3JhcCh+YmlnU3RhdGUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViIiwgYnJlYWtzID0gZGF0ZUJyZWFrcykKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9d2Vla0NoYW5nZUNhc2VzKSkgKyAKICBnZW9tX2NvbChhbHBoYT0wLjUpICsgIAogIGxhYnModGl0bGUgPSAiNy1EYXkgQ2hhbmdlIGluIERhaWx5IENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICI3LURheSBDaGFuZ2UiKSArCiAgZ2VvbV9zbW9vdGgoc2U9RkFMU0UsIHNwYW49MC41KSArIAogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKwogIGZhY2V0X3dyYXAofmJpZ1N0YXRlLCBzY2FsZXMgPSAiZnJlZV95IikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlYiIsIGJyZWFrcyA9IGRhdGVCcmVha3MpCmBgYApcbmV3cGFnZQoKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTZ9CnRtX3NoYXBlKHN0YXRlTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJwb3NpdGl2ZSIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiQ2FzZXMiKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKCmBgYHtyLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD02fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkNhc2VzIHBlciAxTSIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIsIGxlZ2VuZC5wb3NpdGlvbiA9IGMoImxlZnQiLCJ0b3AiKSkKYGBgCgpcbmV3cGFnZQojIyBUZXN0aW5nCgpgYGB7cn0KZ2dwbG90KGJpZ1N0YXREYXRhICU+JSBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpLCAKICAgICAgIGFlcyhiaWdTdGF0ZSx0b3RhbFRlc3RSZXN1bHRzKSkgICsKICBnZW9tX2NvbCgpICsKICBsYWJzKHRpdGxlID0gIlRlc3RzIGJ5IFN0YXRlIiwgeT0iVG90YWwgVGVzdHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9dG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSkgKwogIGdlb21fbGluZShhbHBoYT0wLjQpICsgIAogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKyAKICBsYWJzKHRpdGxlID0gIk5ldyBUZXN0cyBieSBTdGF0ZSIsIHggPSAiRGF0ZSIsIHkgPSAiVGVzdHMgcGVyIERheSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICBmYWNldF93cmFwKH5iaWdTdGF0ZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWIiLCBicmVha3MgPSBkYXRlQnJlYWtzKQpgYGAKClxuZXdwYWdlCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAidGVzdHNQZXJNaWwiLCBzdHlsZSA9ICJjb250IiwgdGl0bGUgPSAiVGVzdHMgcGVyIDFNIiwgcGFsZXR0ZSA9ICJCdUduIikgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIiwgbGVnZW5kLnBvc2l0aW9uID0gYygibGVmdCIsInRvcCIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAicG9zaXRpdmVUZXN0UmF0ZSIsIHN0eWxlID0gImNvbnQiLCB0aXRsZSA9ICJQb3NpdGl2ZSBSYXRlIiwgbGVnZW5kLmZvcm1hdCA9IGxpc3QoZGlnaXRzPTEpKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYApcbmV3cGFnZQoKSW50ZXJwcmV0YXRpb24gb2YgZGlmZmVyZW5jZXMgaW4gY2FzZSByYXRlcyBhY3Jvc3Mgc3RhdGVzIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhvc2Ugc3RhdGVzIHRoYXQgZG8gbW9yZSB0aG9yb3VnaCB0ZXN0aW5nIHdpbGwgaW52YXJpYWJseSB1bmNvdmVyIG1vcmUgY2FzZXMuIEEgbG93ZXIgcG9zaXRpdmUgdGVzdCByYXRlIGlzIGFuIGluZGljYXRpb24gdGhhdCBhIHN0YXRlIGlzIGRvaW5nIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIHNpbmNlLCB3aGVuIHRlc3RpbmcgaXMgcmF0aW9uZWQsIG9ubHkgdGhvc2UgaW5kaXZpZHVhbHMgd2hvIGFyZSBtb3JlIGxpa2VseSB0byB0ZXN0IHBvc2l0aXZlIGFyZSB0eXBpY2FsbHkgdGVzdGVkLiBUaGUgZm9sbG93aW5nIGNoYXJ0IGNvbXBhcmVzIHRoZSBvbmUtd2VlayBpbmNyZWFzZSBpbiBkZXRlY3RlZCBjYXNlcyB0byB0aGUgdGhlIG51bWJlciBvZiB0ZXN0cyBhZG1pbmlzdGVyZWQgcGVyIHN0YXRlIChyZWxhdGl2ZSB0byBwb3B1bGF0aW9uKS4gIFRoZSBzdGF0ZXMgb2YgZ3JlYXRlc3QgY3VycmVudCBjb25jZXJuIGFyZSB0aG9zZSB3aXRoIGJvdGggYSBsYXJnZSBpbmNyZWFzZSBpbiBkZXRlY3RlZCBjYXNlcyBhbmQgYSByZWxhdGl2ZWx5IHNtYWxsIGluY3JlYXNlIHRlc3RzLiAgVGhlc2Ugc3RhdGVzIGxpZSBpbiB0aGUgdXBwZXItcmlnaHQgb2YgdGhlIGNoYXJ0LgoKYGBge3IsIGZpZy53aWR0aD02LjUsIGZpZy5oZWlnaHQ9Nn0Kc3RhdGVXYXRjaERhdGEgPC0gbGVmdF9qb2luKHN0YXRlRGF0YSwgc3RhdGVQb3AgJT4lIHJlbmFtZShmaXBzPXN0KSwgYnkgPSAiZmlwcyIpCgpzdGF0ZVdhdGNoRGF0YSA8LSBzdGF0ZVdhdGNoRGF0YSAlPiUKICBncm91cF9ieShzdGF0ZSkgJT4lCiAgYXJyYW5nZShzdGF0ZSxkYXRlKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VEZWF0aHMgPSByb2xsbWVhbihkZWF0aEluY3JlYXNlLGs9NyxhbGlnbj0icmlnaHQiLCBmaWxsPU5BKSkgJT4lCiAgbXV0YXRlKHdlZWtDaGFuZ2VEZWF0aHMgPSBkZWF0aEluY3JlYXNlIC0gbGFnKGRlYXRoSW5jcmVhc2UsNykpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZUNhc2VzID0gcm9sbG1lYW4ocG9zaXRpdmVJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZUNhc2VzID0gcG9zaXRpdmVJbmNyZWFzZSAtIGxhZyhwb3NpdGl2ZUluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VUZXN0cyA9IHJvbGxtZWFuKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZVRlc3RzID0gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlIC0gbGFnKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSw3KSkgJT4lCiAgbXV0YXRlKHBvc2l0aXZlVGVzdFJhdGUgPSBwb3NpdGl2ZUluY3JlYXNlIC8gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSAlPiUKICBtdXRhdGUod2tQb3NpdGl2ZVRlc3RSYXRlID0gKHBvc2l0aXZlLWxhZyhwb3NpdGl2ZSw3KSkgLyAodG90YWxUZXN0UmVzdWx0cy1sYWcodG90YWxUZXN0UmVzdWx0cyw3KSkgKSAlPiUKICBtdXRhdGUod2tDYXNlc1BlckNhcCA9IDFlNioocG9zaXRpdmUtbGFnKHBvc2l0aXZlLDcpKSAvIHBvcHVsYXRpb24pICU+JQogIG11dGF0ZSh3a1Rlc3RzUGVyQ2FwID0gMWU2Kih0b3RhbFRlc3RSZXN1bHRzLWxhZyh0b3RhbFRlc3RSZXN1bHRzLDcpKSAvIHBvcHVsYXRpb24pICU+JQogIGZpbHRlcihkYXRlID49IG1heChkYXRlKSkKICAKcmF0ZXMgPC0gYygwLjEwLDAuMDUsMC4wMikKZ2dwbG90KHN0YXRlV2F0Y2hEYXRhLCBhZXMoeD13a1Rlc3RzUGVyQ2FwLHk9d2tDYXNlc1BlckNhcCwgc2l6ZT0wLjEqcG9wdWxhdGlvbixsYWJlbD1zdGF0ZSkpICsgCiAgZ2VvbV9wb2ludChhZXMoeD13a1Rlc3RzUGVyQ2FwLHk9d2tDYXNlc1BlckNhcCxzaXplPXBvcHVsYXRpb24pLCBhbHBoYSA9IDAuMjUpICsKICBnZW9tX3RleHQoKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSByYXRlc1sxXSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiZ3JheSIpICsKICBnZW9tX3RleHQoYWVzKDE1MDAwLDE1MDAwKnJhdGVzWzFdKSwgbGFiZWw9IjEwJSBQb3NpdGl2ZSIsIHNpemUgPSAyLjUsIGhqdXN0ID0gMS4xLCBjb2xvciA9ICJncmF5IikgKwogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IDAsIHNsb3BlID0gcmF0ZXNbMl0sIGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAwLjUsIGNvbG9yID0gImdyYXkiKSArCiAgZ2VvbV90ZXh0KGFlcygyMDAwMCwyMDAwMCpyYXRlc1syXSksIGxhYmVsPSI1JSBQb3NpdGl2ZSIsIHNpemUgPSAyLjUsIGhqdXN0ID0gMS4yLCBjb2xvciA9ICJncmF5IikgKwogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IDAsIHNsb3BlID1yYXRlc1szXSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiZ3JheSIpICsKICBnZW9tX3RleHQoYWVzKDIwMDAwLDIwMDAwKnJhdGVzWzNdKSwgbGFiZWw9IjIlIFBvc2l0aXZlIiwgc2l6ZSA9IDIuNSwgaGp1c3QgPSAxLjMsIGNvbG9yID0gImdyYXkiKSArCiAgbGFicyh0aXRsZSA9ICJUZXN0cyB2cy4gQ2FzZXMgYnkgU3RhdGUiLCAKICAgICAgIHggPSAiNy1EYXkgTmV3IFRlc3RzIHBlciBNaWxsaW9uIiwgCiAgICAgICB5ID0gIjctRGF5IE5ldyBDYXNlcyBwZXIgTWlsbGlvbiIsCiAgICAgICBjYXB0aW9uID0gIlBvaW50IHNpemUgcHJvcG9ydGlvbmFsIHRvIHN0YXRlIHBvcHVsYXRpb24uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKICAKYGBgCgpcbmV3cGFnZQojIExvY2FsIERhdGEKClRoZSBmb2xsb3dpbmcgY2hhcnRzIHByZXNlbnQgbW9ydGFsaXR5LCBjYXNlLCBhbmQgdGVzdGluZyBkYXRhIGZvciB0aGUgV2FzaGluZ3RvbiBEQyBtZXRyb3BvbGl0YW4gYXJlYS4KCmBgYHtyfQpsb2NhbERhdGEgPC0gc3RhdGVEYXRhICU+JSAKICBmaWx0ZXIoc3RhdGUgJWluJSBjKCJWQSIsIkRDIiwiTUQiKSkgJT4lCiAgYXJyYW5nZShzdGF0ZSxkYXRlKSAlPiUKICBncm91cF9ieShzdGF0ZSkgJT4lCiAgbXV0YXRlKHdlZWtBdmVyYWdlRGVhdGhzID0gcm9sbG1lYW4oZGVhdGhJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICU+JQogIG11dGF0ZSh3ZWVrQ2hhbmdlRGVhdGhzID0gZGVhdGhJbmNyZWFzZSAtIGxhZyhkZWF0aEluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VDYXNlcyA9IHJvbGxtZWFuKHBvc2l0aXZlSW5jcmVhc2Usaz03LGFsaWduPSJyaWdodCIsIGZpbGw9TkEpKSAgJT4lCiAgbXV0YXRlKHdlZWtDaGFuZ2VDYXNlcyA9IHBvc2l0aXZlSW5jcmVhc2UgLSBsYWcocG9zaXRpdmVJbmNyZWFzZSw3KSkgJT4lCiAgbXV0YXRlKHBvc2l0aXZlVGVzdFJhdGUgPSBpZmVsc2UodG90YWxUZXN0UmVzdWx0c0luY3JlYXNlID4gMTAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlSW5jcmVhc2UgLyB0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSAlPiUKICBtdXRhdGUod2Vla0NoYW5nZVRlc3RzID0gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlIC0gbGFnKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSw3KSkgJT4lCiAgZmlsdGVyKGRhdGUgPj0gYXMuRGF0ZSgiMjAyMC0wMy0xIikpCmBgYAoKCmBgYHtyfQpyZWNlbnRMb2NhbCA8LSBsb2NhbERhdGEgJT4lCiAgZmlsdGVyKGRhdGUgPT0gbWF4KGRhdGUpKSAlPiUKICBzZWxlY3Qoc3RhdGUsIHBvc2l0aXZlLCBkZWF0aCwgcG9zaXRpdmVJbmNyZWFzZSwgZGVhdGhJbmNyZWFzZSkgJT4lCiAgcmVuYW1lKFN0YXRlPXN0YXRlLCAiQ2FzZXMiID0gcG9zaXRpdmUsICJEZWF0aHMiID0gZGVhdGgsICJOZXcgQ2FzZXMiID0gcG9zaXRpdmVJbmNyZWFzZSwgIk5ldyBEZWF0aHMiID0gZGVhdGhJbmNyZWFzZSkKYGBgCgojIyBEZWF0aHMKCmBgYHtyfQpnZ3Bsb3QobG9jYWxEYXRhKSArIAogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gZGVhdGgsIGNvbG9yID0gc3RhdGUpLCBzaXplID0gMSkgKwogIGxhYnModGl0bGUgPSAiRGVhdGhzIiwgeCA9ICJEYXRlIiwgeSA9ICJUb3RhbCBEZWF0aHMiLCBjb2xvciA9ICJTdGF0ZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikgCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CmdncGxvdChsb2NhbERhdGEpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IGRlYXRoSW5jcmVhc2UpLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fc21vb3RoKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBkZWF0aEluY3JlYXNlKSwgc2U9RkFMU0UsIHNwYW49MC41KSArCiAgbGFicyh0aXRsZSA9ICJOZXcgRGVhdGhzIiwgeCA9ICJEYXRlIiwgeSA9ICJEZWF0aHMgcGVyIERheSIsIGNvbG9yID0gIlN0YXRlIikgKwogIGZhY2V0X3dyYXAofnN0YXRlLCBuY29sID0gMSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CmdncGxvdChsb2NhbERhdGEsIGFlcyh4ID0gZGF0ZSwgeSA9IHdlZWtDaGFuZ2VEZWF0aHMpKSArIAogIGdlb21fY29sKGFscGhhID0gMC41KSArCiAgZ2VvbV9zbW9vdGgoc2U9RkFMU0UsIHNwYW49MC41KSArIAogIGxhYnModGl0bGUgPSAiT25lLVdlZWsgQ2hhbmdlIGluIERhaWx5IERlYXRocyIsIHg9IkRhdGUiLCB5PSI3LURheSBDaGFuZ2UiKSArCiAgZmFjZXRfd3JhcCh+c3RhdGUsIG5jb2wgPSAxLCBzY2FsZXMgPSAiZnJlZV95IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9NX0KbG9jYWxNYXBEYXRhIDwtIGNvdW50eU1hcERhdGEgJT4lCiAgZmlsdGVyKHN0YXRlX2ZpcHMgJWluJSBjKDI0LDExLDUxKSkgCmxvY2FsU3RhdGVNYXBzIDwtIHN0YXRlTWFwRGF0YSAlPiUKICBmaWx0ZXIoc3QgJWluJSBjKDI0LDExLDUxKSkKCnRtX3NoYXBlKGxvY2FsTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKGx3ZCA9IDAuMykgKyAKICB0bV9maWxsKGNvbCA9ICJkZWF0aHNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBwZXIgMU0iKSArCiAgdG1fc2hhcGUobG9jYWxTdGF0ZU1hcHMpICsKICB0bV9ib3JkZXJzKGx3ZCA9IDEuNSwgY29sID0gImdyYXkiKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQpuZWFyTWFwRGF0YSA8LSBsb2NhbE1hcERhdGEgJT4lCiAgZmlsdGVyKGZpcHMgJWluJSBjKDUxNjAwLDUxNTEwLDUxNjEwLDUxMDU5LDUxMTA3LDUxMDEzLDExMDAxLDI0MDMxLDI0MDMzKSkKCnRtX3NoYXBlKG5lYXJNYXBEYXRhKSArIAogIHRtX2JvcmRlcnMoKSArIAogIHRtX2ZpbGwoY29sID0gImRlYXRoc1Blck1pbCIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiRGVhdGhzIHBlciAxTSIpICsKICB0bV90ZXh0KCJjb3VudHkiLCBzaXplPTAuNSkgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIikKYGBgCgpcbmV3cGFnZQojIyBDYXNlcwoKYGBge3J9CmdncGxvdChsb2NhbERhdGEpICsgCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBwb3NpdGl2ZSwgY29sb3IgPSBzdGF0ZSksIHNpemU9MSkgKwogIGxhYnModGl0bGUgPSAiQ2FzZXMiLCB4ID0gIkRhdGUiLCB5ID0gIlRvdGFsIENhc2VzIiwgY29sb3IgPSAiU3RhdGUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hLCB0cmFucyA9ICJsb2cxMCIpIApgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD02fQpnZ3Bsb3QobG9jYWxEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBwb3NpdGl2ZUluY3JlYXNlKSwgYWxwaGE9MC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHBvc2l0aXZlSW5jcmVhc2UpLCBzZT1GQUxTRSwgc3Bhbj0wLjUpICsKICBsYWJzKHRpdGxlID0gIk5ldyBDYXNlcyIsIHggPSAiRGF0ZSIsIHkgPSAiQ2FzZXMgcGVyIERheSIsIGNvbG9yID0gIlN0YXRlIikgKwogIGZhY2V0X3dyYXAofnN0YXRlLCBuY29sID0gMSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CmdncGxvdChsb2NhbERhdGEsIGFlcyh4ID0gZGF0ZSwgeSA9IHdlZWtDaGFuZ2VDYXNlcykpICsgCiAgZ2VvbV9jb2woYWxwaGEgPSAwLjUpICsKICBnZW9tX3Ntb290aChzZSA9IEZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJPbmUtV2VlayBDaGFuZ2UgaW4gRGFpbHkgQ2FzZXMiLCB4PSJEYXRlIiwgeT0iNy1EYXkgQ2hhbmdlIikgKwogIGZhY2V0X3dyYXAofnN0YXRlLCBuY29sID0gMSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTV9CnRtX3NoYXBlKGxvY2FsTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKGx3ZCA9IDAuMykgKyAKICB0bV9maWxsKGNvbCA9ICJjYXNlc1Blck1pbCIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiQ2FzZXMgcGVyIDFNIikgKwogIHRtX3NoYXBlKGxvY2FsU3RhdGVNYXBzKSArCiAgdG1fYm9yZGVycyhsd2QgPSAxLjUsIGNvbCA9ICJncmF5IikgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9NX0KdG1fc2hhcGUobmVhck1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkNhc2VzIHBlciAxTSIpICsKICB0bV90ZXh0KCJjb3VudHkiLCBzaXplPTAuNSkgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIikKYGBgCgpcbmV3cGFnZQojIyBUZXN0aW5nCgpgYGB7cn0KZ2dwbG90KGxvY2FsRGF0YSkgKyAKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHRvdGFsVGVzdFJlc3VsdHMsIGNvbG9yID0gc3RhdGUpLCBzaXplID0gMSkgKwogIGxhYnModGl0bGUgPSAiVGVzdHMiLCB4ID0gIkRhdGUiLCB5ID0gIlRvdGFsIFRlc3RzIiwgY29sb3IgPSAiU3RhdGUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hLCB0cmFucyA9ICJsb2cxMCIpIApgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD02fQpnZ3Bsb3QobG9jYWxEYXRhLCBhZXMoeCA9IGRhdGUsIHkgPSB0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UpKSArCiAgZ2VvbV9saW5lKGFscGhhPTAuNCkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IFRlc3RzIiwgeCA9ICJEYXRlIiwgeSA9ICJUZXN0cyBwZXIgRGF5IikgKwogIGZhY2V0X3dyYXAofnN0YXRlLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDEpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD02fQpnZ3Bsb3QobG9jYWxEYXRhLCBhZXMoeCA9IGRhdGUsIHkgPSBwb3NpdGl2ZVRlc3RSYXRlKSkgKwogIGdlb21fbGluZShhbHBoYT0wLjQpICsKICBnZW9tX3Ntb290aChzZT1GQUxTRSwgc3Bhbj0wLjUpICsKICBsYWJzKHRpdGxlID0gIlBvc2l0aXZlIFRlc3QgUmF0ZSIsIHggPSAiRGF0ZSIsIHkgPSAiUmF0ZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudF9mb3JtYXQoMiksIGxpbWl0cyA9IGMoMC4wLDAuNCkpICsKICBmYWNldF93cmFwKH5zdGF0ZSwgbmNvbCA9IDEpIApgYGAK